package br.unipe.oitomaluco.beans;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;
import br.unipe.oitomaluco.beans.Carta.Valor;
import br.unipe.oitomaluco.interfaces.MesaIF;
import br.unipe.oitomaluco.regras.Regras;
import br.unipe.oitomaluco.view.View;

public class Mesa implements MesaIF {

	private List<Jogador> jogadores;
	private Baralho baralho;
	private View view;
	private Regras regras;

	public Mesa() {
		super();
		this.jogadores = new ArrayList<Jogador>();
		this.baralho = new Baralho();
		this.view = new View();
		this.regras = new Regras();
	}

	public List<Jogador> getJogadores() {
		return jogadores;
	}

	public void setJogadores(List<Jogador> jogadores) {
		this.jogadores = jogadores;
	}

	public Baralho getBaralho() {
		return baralho;
	}

	public void setBaralho(Baralho baralho) {
		this.baralho = baralho;
	}

	public View getView() {
		return view;
	}

	public void setView(View view) {
		this.view = view;
	}

	public Regras getRegras() {
		return regras;
	}

	public void setRegras(Regras regras) {
		this.regras = regras;
	}

	public void inserirJogadores(int qtde) {
		for (int i = 0; i < qtde; i++) {
			Jogador jogador = new Jogador();
			String nome = JOptionPane.showInputDialog(null, "NOME: ", "[Jogador " + (i + 1) + "]", JOptionPane.QUESTION_MESSAGE);
			jogador.setNome(nome.toUpperCase());
			jogador.setPontuacao(0);
			jogador.setCartas(baralho.distribuirCartas());
			jogadores.add(jogador);
			jogador.exibirCartasPorJogador();
		}
	}

	public void startJogo(boolean validador, Carta descarte, int posicao,
			boolean sair) {
		for (Jogador j : jogadores) {
			validador = true;
			int x, y = 0;
			boolean validador2 = true;
			baralho.imprimeCartaNaMesa();
			j.auxPegaDoBolo(descarte, baralho);
			posicao = view.capturaCartaJogador(j);
			while (validador2) {
				if(y == 1){
					j.exibirCartasPorJogador();
					baralho.imprimeCartaNaMesa();
				}
				while (validador) {
					x = 1;
					if (x == 0 || y == 1) {
						posicao = view.capturaCartaJogador(j);
					}
					if (regras.cartasIguais(j.getCartas().get(posicao), baralho
							.getCartasDaMesa().peek())) {
						descarte = j.descartarCarta(posicao);
						validador = false;
						x--;
					} else {
						int novaPosicao = regras.validarIndice(j);
						if (regras.cartasIguais(j.getCartas().get(novaPosicao),
								baralho.getCartasDaMesa().peek())) {
							descarte = j.descartarCarta(novaPosicao);
							validador = false;
							x--;
						}
						x--;
					}
				}
				baralho.cartaNaMesa(descarte);
				if(descarte.getValor().equals(Valor.as) || descarte.getValor().equals(Valor.dama) ){
					view.warnningJogadaAsDama();
					validador2=true;
					validador = true;
					y = 1;
				}else{
					validador2 = false;
				}
			}
			j.exibirCartasPorJogador();
			System.out.println("-------------------------------");
			if (j.getCartas().size() > 0) {
				sair = false;
			} else {
				sair = true;
			}
		}
	}
}